package com.wanyangproject.androidlearning.multiThread;

import com.wanyangproject.androidlearning.multiThread.SuiTangEmpires.ArmRunnable;
import com.wanyangproject.androidlearning.multiThread.SuiTangEmpires.KeyPersonThread;
import com.wanyangproject.androidlearning.multiThread.energyConservation.Energy;
import com.wanyangproject.androidlearning.multiThread.energyConservation.EnergyTransferTask;

/*
 * 多线程
 * thread类 和 runnable接口
 * thread的方法主要有：start() sleep() join() 其它线程等待当前线程执行完毕后才会执行
 *                    yield()当前线程释放出线程资源。
 *                    stop()方法并不能终止当前线程，停止线程的最有方法应该是使用标识符变量
 *
 * wait() notify()/notifyAll()方法使得当前的线程阻塞，使用时一般需要先获得锁对象，因此一般会执行在synchronized代码块里面
 * 当线程执行wait()方法时，会释放当前的锁，让出cpu资源，进入等待状态
 * notify()方法则会唤醒一个或多个等在中的线程。
 *
 *   多线程演绎隋唐演义故事
 *   当前有农民军和隋朝军队两个runnable，英雄人物程咬金线程。以及舞台线程。他们同时演绎隋唐战争故事。
 *
 *
 *
 * */
public class Test {


    public static void main(String[] args) throws InterruptedException {
//    int s = 10;
//    for (int i=0;i<100;i++){
//        Thread thread = new ThreadJoin(s);
//        thread.start();
//        thread.join();
//        s = s+1;
//    }


    ArmRunnable suiArm = new ArmRunnable();
    ArmRunnable farmArm = new ArmRunnable();
    Thread suiThread = new Thread(suiArm,"隋朝军队");
    Thread farmThread = new Thread(farmArm,"农民军");
    KeyPersonThread keyPersonThread = new KeyPersonThread("程咬金");
    suiThread.start();
    farmThread.start();
    Thread.sleep(2000);
    keyPersonThread.start();
    suiArm.keepRunning = false;
    farmArm.keepRunning = false;
    try {
        keyPersonThread.join();
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
    System.out.println(String.format("%s结束了战斗。。。",suiThread.getName()));
    System.out.println(String.format("%s结束了战斗。。。",farmThread.getName()));

    System.out.println(String.format("%s结束了战斗。。。",keyPersonThread.getName()));

        Energy energy = new Energy(1000);
        for (int i = 0; i < 100; i++) {
//            int from = (int) (energy.getBoxNum() * Math.random());
            EnergyTransferTask transferTask = new EnergyTransferTask(energy, i, 1000);
            Thread thread = new Thread(transferTask,String.format("线程%d",i));
            thread.start();
//            System.out.println("能量盒总量为：" + energy.sum());
        }


    }


}
